package controller;

import java.util.Date;
import java.util.List;
import java.sql.Timestamp;

import javax.ejb.EJB;
import javax.ejb.EJBException;

import EJB.Business.GestorDePedidosLocal;
import EJB.Business.GestorDeReservaLocal;
import EJB.Business.GestorDeUsuariosLocal;
import EJB.Entity.MesaFacadeLocal;
import EJB.Entity.PlatoFacadeLocal;
import Entity.Mesa;
import Entity.Pedido;
import Entity.Plato;
import Entity.Reserva;
import Entity.Usuario;

public class Reservation extends BaseController {
	private Timestamp created;
	private Date target;
	private Usuario usuario;
	private Reserva reserva;
	private String platosString;
	private List<Plato> allPlatos;
	private List<Pedido> pedidos;
	private List<Plato> platos;
	private List<Mesa> allMesas;
	private @EJB MesaFacadeLocal mesasManager;
	private @EJB PlatoFacadeLocal platosManager;
	private @EJB GestorDeReservaLocal reservaManager;
	private @EJB GestorDePedidosLocal pedidoManager;
	private @EJB GestorDeUsuariosLocal usuarioManager;	
	
	public String makeReserva() {
		created = new Timestamp(new java.util.Date().getTime());		
		usuario = usuarioManager.getUsuarioById(Integer.parseInt((String)getSessionParam("user_id")));
		reserva = new Reserva();
		reserva.setFechaCreacion(created);
		reserva.setUsuario(usuario);
		reserva.setFechaObjetivo(target);
		
		allPlatos = platosManager.findAll();		
		allMesas = mesasManager.findAll();

		return "pedido.new";
	}
	
	public String makePedido() {
		String[] ids = platosString.split(",");
		reservaManager.asignarFecha(reserva.getFechaObjetivo());
		Mesa m = new Mesa();
		m.setId(1);
		pedidoManager.asignarMesa(m);		
		
		for(String s : ids) {
			System.out.println("Platos escogidos: "+ s);
			Plato p = new Plato();
			p.setId(Integer.parseInt(s));
			System.out.println("Plato " + p.toString());
			agregarPlato(p);	
		}
		try {
			reservaManager.agregarPedido(pedidoManager.getPedido());
			reservaManager.update();
		} catch (Exception e) {}
		
		return null;		
	}
	
	public String finish() {
		
		String[] ids = platosString.split(",");
		 reservaManager.asignarFecha(reserva.getFechaObjetivo());
		Mesa m = new Mesa();
		m.setId(1);
		pedidoManager.asignarMesa(m);		
		
		for(String s : ids) {
			Plato p = new Plato();
			p.setId(Integer.parseInt(s));
			agregarPlato(p);			
		}
		try {
			reservaManager.agregarPedido(pedidoManager.getPedido());
			reservaManager.update();
		} catch (Exception e) {}
		
		return "reserva.success";	
	}
	
	public Timestamp getCreated() {
		return created;
	}
	public void setCreated(Timestamp created) {
		this.created = created;
	}
	public Date getTarget() {
		return target;
	}
	public void setTarget(Date target) {
		this.target = target;
	}
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Pedido> getPedidos() {
		return pedidos;
	}

	public void setPedidos(List<Pedido> pedidos) {
		this.pedidos = pedidos;
	}

	public List<Plato> getPlatos() {
		return platos;
	}

	private void agregarPlato(Plato p) {
		// la lara lara
	}
	
	public void setPlatos(List<Plato> platos) {
		this.platos = platos;
	}

	public List<Plato> getAllPlatos() {
		return allPlatos;
	}

	public void setAllPlatos(List<Plato> allPlatos) {
		this.allPlatos = allPlatos;
	}
	
	public String makePeddido() {
		return null;
	}	

	public List<Mesa> getAllMesas() {
		return allMesas;
	}

	public void setAllMesas(List<Mesa> allMesas) {
		this.allMesas = allMesas;
	}
	
	public String finnish() {
		return "reserva.success";		
	}

	public Reserva getReserva() {
		return reserva;
	}

	public void setReserva(Reserva reserva) {
		this.reserva = reserva;
	}

	public void setPlatosString(String platosString) {
		this.platosString = platosString;
	}

	public String getPlatosString() {
		return platosString;
	}
	
}
